package com.laoxu.test.rbacdemo.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.laoxu.test.rbacdemo.common.PageRequest;
import com.laoxu.test.rbacdemo.model.SysDeptUsers;
import com.laoxu.test.rbacdemo.model.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author laoxu
 * @since 2020-08-09
 */
public interface SysUserService extends IService<SysUser> {
    /**
     * 通过用户名查找用户
     *
     * @param username username
     * @return user
     */
    SysUser findByName(String username);

    /**
     * 查询用户详情，包括基本信息，用户角色，用户部门
     *
     * @param user user
     * @return IPage
     */
    IPage<SysUser> findUserDetail(SysUser user, PageRequest request);

    /**
     * 更新用户登录时间
     *
     * @param username username
     */
    void updateLoginTime(String username) throws Exception;

    /**
     * 新增用户
     *
     * @param user user
     */
    void createUser(SysUser user) throws Exception;

    /**
     * 修改用户
     *
     * @param user user
     */
    void updateUser(SysUser user) throws Exception;

    /**
     * 删除用户
     *
     * @param userIds 用户 id数组
     */
    void deleteUsers(String[] userIds) throws Exception;

    /**
     * 更新个人信息
     *
     * @param user 个人信息
     */
    void updateProfile(SysUser user) throws Exception;

    /**
     * 更新用户头像
     *
     * @param username 用户名
     * @param avatar   用户头像
     */
    void updateAvatar(String username, String avatar) throws Exception;

    /**
     * 更新用户密码
     *
     * @param username 用户名
     * @param password 新密码
     */
    void updatePassword(String username, String password) throws Exception;

    /**
     * 注册用户
     *
     * @param username 用户名
     * @param password 密码
     */
    void regist(String username, String password) throws Exception;

    /**
     * 重置密码
     *
     * @param usernames 用户集合
     */
    void resetPassword(String[] usernames) throws Exception;

    String findSubordinates(Long deptId) throws Exception;

    List<SysDeptUsers> findSubordinatesMap();
}
